import 'dart:io' show Platform;

import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';

import '../utils/logger.dart';

class NavigationService {
  static Future<void> navigateTo(double latitude, double longitude, String address) async {
    try {
      // 检查各种地图应用是否安装
      final uriSchemes = {

        // 'amap': 'androidamap://navi?sourceApplication=金虎送货&lat=$latitude&lon=$longitude&dev=0&style=2',  // 高德地图
        'amap': 'androidamap://navi?sourceApplication=金虎送货&lat=$latitude&lon=$longitude&dev=0&title=$address',  // 高德地图
        'baidu': 'baidumap://map/direction?destination=$latitude,$longitude&coord_type=bd09ll&mode=driving',  // 百度地图
        'tencent': 'qqmap://map/routeplan?type=drive&to=$address&tocoord=$latitude,$longitude',  // 腾讯地图
        'google': 'comgooglemaps://?daddr=$latitude,$longitude&directionsmode=driving',  // 谷歌地图
        'apple': 'maps://?daddr=$latitude,$longitude&dirflg=d',  // 苹果地图
      };

      final availableMaps = <String, Uri>{};

      // 检查每个地图应用是否可用
      for (final entry in uriSchemes.entries) {
        final uri = Uri.parse(entry.value);
        if (await canLaunchUrl(uri)) {
          availableMaps[entry.key] = uri;
        }
      }

      // 如果没有可用的地图应用，尝试打开系统默认地图
      if (availableMaps.isEmpty) {
        final fallbackUrl = Platform.isIOS
            ? 'maps://?daddr=$latitude,$longitude'  // iOS 默认地图
            : 'geo:$latitude,$longitude?q=$address';  // Android 默认地图
        final uri = Uri.parse(fallbackUrl);
        if (await canLaunchUrl(uri)) {
          await launchUrl(uri);
          return;
        }
        throw Exception('没有可用的地图应用');
      }

      // 如果只有一个可用的地图应用，直接打开
      if (availableMaps.length == 1) {
        await launchUrl(availableMaps.values.first);
        return;
      }

      // 显示地图选择对话框
      if (navigatorKey.currentContext != null) {
        final selectedMap = await showDialog<String>(
          context: navigatorKey.currentContext!,
          builder: (context) => AlertDialog(
            title: const Text('选择导航应用'),
            content: SingleChildScrollView(
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: [
                  if (availableMaps.containsKey('amap'))
                    _buildMapOption(context, '高德地图', 'amap', 'assets/icons/amap.png'),
                  if (availableMaps.containsKey('baidu'))
                    _buildMapOption(context, '百度地图', 'baidu', 'assets/icons/baidu.png'),
                  if (availableMaps.containsKey('tencent'))
                    _buildMapOption(context, '腾讯地图', 'tencent', 'assets/icons/tencent.png'),
                  if (availableMaps.containsKey('google'))
                    _buildMapOption(context, '谷歌地图', 'google', 'assets/icons/google.png'),
                  if (availableMaps.containsKey('apple'))
                    _buildMapOption(context, '苹果地图', 'apple', 'assets/icons/apple.png'),
                ],
              ),
            ),
          ),
        );

        if (selectedMap != null && availableMaps.containsKey(selectedMap)) {
          await launchUrl(availableMaps[selectedMap]!);
        }
      }
    } catch (e) {
      Logger.e('Navigation error', e);
      throw Exception('导航失败');
    }
  }

  static Widget _buildMapOption(BuildContext context, String title, String key, String iconPath) {
    return ListTile(
      leading: Image.asset(
        iconPath,
        width: 24,
        height: 24,
      ),
      title: Text(title),
      onTap: () => Navigator.pop(context, key),
    );
  }
}

// 添加全局 NavigatorKey
final navigatorKey = GlobalKey<NavigatorState>();